/**
 * Representación Abstracta de un Plan
 * 
 * @author Alex Muñoz , Mauricio Orellana
 * @version 2012.05.23
 */
import java.util.ArrayList;

public abstract class Plan
{
    private ArrayList<Turno> turnos;
    private Tipo tipo;
    private int costoFijoCliente;
    
    
    /**
     * Constructor de Objetos de la Clase Plan
     * 
     * @param tipo El tipo de cliente
     * @param costoFijoCliente  El costo fijo para el cliente
     */
    public Plan(Tipo tipo, int costoFijoCliente)
    {
        this.tipo = tipo;
        this.costoFijoCliente = costoFijoCliente;
    }
    
    /**
     * Obtener Empleados
     * 
     * @return una coleccion con todos los empleados que trabajan en el plan 
     */
    public ArrayList<Empleado> getEmpleados()
    {
        ArrayList empleadosEnPlan = new ArrayList ();
        
        for(Turno turno : this.turnos){
            empleadosEnPlan.addAll(turno.getEmpleados());
        }
        return empleadosEnPlan;
    }
    
    /**
     * Obtener costo fijo del Cliente
     * 
     * @return Integer que contiene la cantidad que debe cancelar como mínimo el Cliente del Plan 
     */
    public int getCostoFijoCliente() {
        return costoFijoCliente;
    }
    
    /**
     * Modificar Costo Fijo del Cliente
     * 
     * @param costoFijoCliente Entero que contiene la nueva cantidad mínima que el Cliente debera Cancelar por el Plan
     */
    public void setCostoFijoCliente(int costoFijoCliente) {
        this.costoFijoCliente = costoFijoCliente;
    }
    
    /**
     * Obtener Tipo
     * 
     * @return Objeto enumerado que Contiene el Tipo de usuario al cual esta dirigido el Plan
     */
    public Tipo getTipo() {
        return tipo;
    }
    
    /**
     * Modificar el Tipo
     * 
     * @param tipo Objeto enumerado que contiene el nuevo tipo de usuario al cual esta dirigido el Plan
     */
    public void setTipo(Tipo tipo) {
        this.tipo = tipo;
    }
    
    /**
     * Imprime la informacion de un plan
     */
    public void imprimir()
    {
        System.out.println("Dirigido a : " + this.tipo.getTipo());
        System.out.println("Costo Fijo Cliente: " + this.costoFijoCliente);
    }
    
        
}
